from flask import Blueprint,jsonify,request
from flask_restful import Api,Resource
from settings.datas import greate_data
from settings.mysqls import db
import datetime,time

noveldp=Blueprint('novel',__name__)
api=Api(noveldp)

# 登录
class Login(Resource):
    def post(self):
        data=greate_data()
        role_id=data['role_id']
        if role_id:
            sql="select r.name as name,r.url as url from resources as r,role_resources as rr where rr.role_id={} and rr.resources_id=r.id".format(int(role_id))
            res=db.find_all(sql)
            return jsonify({'code':200,'list':res})


        # 对角色id进行判断，是2的将id存入管理员登录


# 发布小说
class Novel(Resource):
    def post(self):
        # 小说id  审核小说
        id=request.args.get('id')
        data=greate_data()
        
        if id:
            status=data['status']
            audit_time=datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m-%d')
            print(audit_time)
            sql="update novel set status={},audit_time='{}' where id={}".format(int(status),audit_time,int(id))
            db.update(sql)
            # 获取作者id
            sql4="select userid from  novel where id={}".format(int(id))
            user=db.find(sql4)
            userid=user['userid']
            # 审核成功用户积分+2
            if int(status)==2:
                sql1="select u_integral from user where id={}".format(int(userid))
                res1=db.find(sql1)
                integral=int(res1['u_integral'])+2
                sql2="update user set u_integral={} where id={}".format(integral,int(userid))
                db.update(sql2)
            return jsonify({'code':201,'msg':'修改成功'})  #修改审核状态
        
        userid=data['userid']
        name=data['name']
        sql3="insert into novel(userid,name) values({},'{}')".format(int(userid),name)
        db.update(sql3)
        return jsonify({'code':201,'msg':'添加成功'})  #小说添加成功，审核中


        ##多人审核
        # 管理员登录后将管理员id添加到redis中用set存
        # 先判断是否有管理员登录
        # 有的话进行下一步   没有的返回没有管理员，请等待
        # 对每个管理员正在审批的小说长度进行判断，谁的最短给谁添加  audit1：[1,2,3] redis中列表存
        # 可以使用步长值写，初始化一个最小值 如果某管理员长度小于初始化长度进行替换
        # 列表左存右取或者右存左取
        # 审核成功从列表中删除小说id

    #
    def get(self):
        userid=request.args.get('userid')
        # 有用户id时， 用户可以查看自己发布小说，及状态
        # 没有时是管理员看到的
        if userid:
            sql="select * from novel where userid={}".format(int(userid))
            res=db.find_all(sql)
        sql="select * from novel where status=1"
        res=db.find_all(sql)
        return jsonify({'code':200,'list':res})

class Gift(Resource):
    def get(self):
        sql="select * from gift"
        res=db.find_all(sql)
        return jsonify({'code':200,'list':res})
    def post(self):
        # 如果有id则是兑换礼品，没有id时是管理员添加礼品
        id=request.args.get('id')
        data=greate_data()
        if id:
            userid=data['userid']
            # 获取商品数量
            sql="select num,d_integral from gift where id={}".format(int(id))
            res=db.find(sql)
            if int(res['num'])==0:
                return jsonify({'code':200,'msg':'礼品已兑换，请更换礼品'})
            
            # 获取用户积分
            sql1="select u_integral from user where id={}".format(int(userid))
            res1=db.find(sql1)
            if int(res1['u_integral'])<int(res['d_integral']):
                return jsonify({'code':200,'msg':'积分不够'})    
            # 礼品数量-1
            num=int(res['num'])-1
            
            # 用户积分减去礼品积分
            u_integral=int(res1['u_integral'])-int(res['d_integral'])
            # 兑换成功，更新礼品数量
            sql2="update gift set num={} where id={}".format(num,int(id))
            db.update(sql2)
            # 兑换成功更新用户积分
            sql3="update user set u_integral={} where id={}".format(u_integral,int(userid))
            db.update(sql3)
            # 添加兑换信息
            time1=time.time()
            sql4="insert into exchange_gift(userid,giftid,c_time) values({},{},{})".format(int(userid),int(id),int(time1))
            db.update(sql4)
            return jsonify({'code':200,'msg':'兑换成功'})
        # 管理员添加礼品
        name=data['name']
        num1=data['num']
        d_integral=data['d_integral']
        sql="insert into gift(name,num,d_integral) values('{}',{},{})".format(name,int(num1),int(d_integral))
        db.update(sql)
        return jsonify({'code':200,'msg':'添加成功'})

class Echarts(Resource):
    def get(self):
        userid=request.args.get('userid')
        if userid:
            sql="select count(audit_time),audit_time from novel where status=2 and userid={} group by audit_time".format(int(userid))
            res=db.find_all(sql)
            date=[]
            values=[]
            for i in res:
                date.append(datetime.datetime.strftime(i['audit_time'],'%Y-%m-%d'))
                values.append(i['count(audit_time)']*2)
            return jsonify({'code':200,'date':date,'values':values})

api.add_resource(Login,'/log')
api.add_resource(Novel,'/novel')
api.add_resource(Gift,'/gift')
api.add_resource(Echarts,'/echarts')
